class GuiasController < ApplicationController
  require "rexml/document"
  require 'zip/zip'

  before_filter :load_items, :only => [:new, :create, :edit, :update, :duplicar, :addTrabalhos]
  before_filter :load_procedimentos, :only => [:new, :create, :edit, :update]


  def new
    session[:newproc] = []
  end

  def conteudoxml
    caminho = "public/transmissao/#{params[:arq]}"
    if File.exist?(caminho)
      lista_resultado = []
      zf = Zip::ZipFile.new(caminho)
      zf.each_with_index do |entry, index|
        render :text => "entry #{index} is #{entry.name}, size = #{entry.size}, compressed size = #{entry.compressed_size}", :layout => false
        # use zf.get_input_stream(entry) to get a ZipInputStream for the entry
        # entry can be the ZipEntry object or any object which has a to_s method that
        # returns the name of the entry.
      end

      #        xml = File.new(arq, "w+")
      #        unless xml[".xml"].nil?
      #          @obj_rexml = REXML::Document.new File.open(arq)
      #          nos = "ans:mensagemTISS/ans:prestadorParaOperadora/ans:loteGuias/ans:guias/ans:guiaFaturamento/ans:guiaSP_SADT"
      #          @obj_rexml.elements.each(nos) do |guia|
      #            guia.each_element("ans:identificacaoGuiaSADTSP") do |identificacao|
      #              resultado = Hash.new #hash que vai conter um resultado
      #              resultado[:numeroGuiaOperadora] = identificacao.text("ans:numeroGuiaOperadora")
      #              lista_resultado << resultado
      #            end
      #          end
      #        end
      #
      #      @txt = ""
      #      @txt += "#{arq}<br/>"
      #      lista_resultado.each do |r|
      #        @txt += r[:numeroGuiaOperadora]
      #        @txt += "\n<br/>"
      #      end
      #      render :text => "#{lista_resultado}", :layout => false
      #    else
      #      render :text => "Não existe arquivos ou esta em branco.", :layout => false
      #    end
    else
      render :text => "deu errado", :layout => false
    end
  end

  def addTrabalhos
    session[:newproc].clear
    @procedimentos = Procedimento.find(:all)
    @procedimentos.each do |proc|
      checkBox = "checkBoxProc_#{proc.id}"
      if !session[:newproc].include?(proc) && !params[checkBox.to_sym].blank? && !params[checkBox.to_sym].nil?
        session[:newproc] << {:procedimento => proc, :quantidade => params[checkBox.to_sym]}
      end
    end
    render :partial => 'resultado'
  end
  
  def apagadas
    @guias = Guia.paginate_all_by_status("APAGADA", :order => "dataemissaoguia desc", :page => params[:page], :per_page => 20)
    respond_to do |format|
      format.html # index.rhtml
      format.xml  { render :xml => @guias.to_xml }
    end
  end

  def geradas
    @guias = Guia.paginate_all_by_status("GERADA", :order => "dataemissaoguia desc", :page => params[:page], :per_page => 50)
    respond_to do |format|
      format.html # index.rhtml
      format.xml  { render :xml => @guias.to_xml }
    end
  end
  
  def naogeradas
    @guias = Guia.paginate_all_by_status(nil, :order => "numeroguiaprincipal asc", :page => params[:page], :per_page => 50)
    respond_to do |format|
      format.html # index.rhtml
      format.xml  { render :xml => @guias.to_xml }
    end
  end

  def show
    @guia = Guia.find(params[:id])
    respond_to do |format|
      format.html # show.rhtml
      format.xml  { render :xml => @guia.to_xml }
    end
  end

  def edit
    @guia = Guia.find(params[:id])
    @guia.dataemissaoguia = @guia.dataemissaoguia.to_s_br[0..9]
    @guia.validadecarteirabeneficiario = @guia.validadecarteirabeneficiario.to_s_br[0..9]
  end

  def create
    @guia = Guia.new(params[:guia])
    session[:newproc].each do |proc|
      @trabalho = Trabalho.new(:procedimento => proc[:procedimento], :quantidade => proc[:quantidade], :datatrabalho => DateTime.now)
      if @trabalho.save
        @guia.trabalhos << @trabalho
      end
    end
    respond_to do |format|
      if @guia.save
        flash[:notice] = 'Guia criada com sucesso!'
        format.html { redirect_to new_guia_path }
        format.xml  { head :created, :location => guia_url(@guia) }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @guia.errors.to_xml }
      end
    end
  end

  def update
    @guia = Guia.find(params[:id])
    respond_to do |format|
      unless params[:guia][:validadecarteirabeneficiario].nil?
        d1 = params[:guia][:validadecarteirabeneficiario]
        params[:guia][:validadecarteirabeneficiario] = DateTime.civil(d1[6..9].to_i, d1[3..4].to_i, d1[0..1].to_i,0,0,0,0)
      end
      unless params[:guia][:dataemissaoguia].nil?
        d2 = params[:guia][:dataemissaoguia]
        params[:guia][:dataemissaoguia] = DateTime.civil(d2[6..9].to_i, d2[3..4].to_i, d2[0..1].to_i,0,0,0,0)
      end
      
      unless session[:newproc].nil?
        @guia.trabalhos.destroy_all
        session[:newproc].each do |proc|
          @trabalho = Trabalho.new(:procedimento => proc[:procedimento], :quantidade => proc[:quantidade], :datatrabalho => DateTime.now)
          if @trabalho.save
            @guia.trabalhos << @trabalho
          end
        end
      end
      
      if @guia.update_attributes(params[:guia])
        flash[:notice] = 'Guia atualizada com sucesso.'
        format.html { redirect_to guia_url(@guia) }
        format.xml  { head :ok }
      else
        flash[:notice] = 'Ocorreu um erro ao tentar atuzaliar esta Guia.'
        format.html { render :action => "edit" }
        format.xml  { render :xml => @guia.errors.to_xml }
      end
    end
  end

  def apagar_geradas
    @guia = Guia.find(params[:id])
    @guia.update_attribute("status","APAGADA")
    flash[:notice] = "Guia apagado com sucesso."
    redirect_to :action => 'geradas'
  end
  
  def apagar_nao_geradas
    @guia = Guia.find(params[:id])
    @guia.update_attribute("status","APAGADA")
    flash[:notice] = "Guia apagado com sucesso."
    redirect_to :action => 'naogeradas'
  end
  
  def arquivosenviados
    respond_to do |format|
      @arquivos = []
      if File.directory?('public/transmissao')
        Dir.foreach('public/transmissao') do |arq|
          unless arq[".zip"].nil?
            @arquivos << [arq,File.stat("public/transmissao/#{arq}").mtime.to_s_br]
          end
        end
        if @arquivos.empty?
          flash[:error] = "Não existe arquivos ou esta em branco."
          format.html { redirect_to guias_url}
        else
          format.html
        end
      else
        flash[:error] = "Não existe arquivos ou esta em branco."
        format.html { redirect_to guias_url}
      end
    end
  end
  
  def restaurar
    unless params[:restaurar].nil?
      params[:restaurar].each_key do |key|
        guia = Guia.find(key)
        if guia
          if params[:restaurar][key] == "0"
            flash[:notice] = "Guia restaurado com sucesso."
            guia.update_attribute("status", "GERADA")
          end
          if params[:restaurar][key] == "1"
            flash[:notice] = "Guia restaurado com sucesso."
            guia.update_attribute("status",nil)
          end
        end
      end
    end
    redirect_to :action => 'apagadas'
  end
  
  def load_items
    @empresas = Empresa.find(:all, :order => "nome").collect {|e| [e.nome, e.id]}
    @operadoras = Operadora.find(:all, :order => "nome").collect {|o| [o.nome, o.id]}
    @conselho = [["CRM"], ["CRAS"], ["COREN"], ["CRF"], ["CREFITO"], ["CRV"], ["CRN"], ["CRO"], ["CRP"], ["OUT"], ["CRFA"]]
    @carateratendimento = [["E"], ["U"]]
    @tiposaida = [["1"],["2"],["3"],["4"],["5"],["6"]]
    @tipoatendimento = [["01"],["02"],["03"],["04"],["05"],["06"],["07"],["08"],["09"],["10"]]
  end

  def load_procedimentos
    @proc = Procedimento.find(:all, :order => "codigo ASC").collect {|p| [p.descricao, p.id]}
  end
end
